$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

C++
C#

Вишедимензиони низови и матрице

Елементи програмског језика

Матрице

Матрица може да се посматра као низ низова: имамо низ врста (редова), а свака врста је низ елемената. Позиција сваког елемента у матрици је дефинисана са два броја, тј. две димензије – у којој врсти тј. реду, и у којој колони се елемент налази.

Статичка матрица се у језику C++ алоцира слично као што се алоцира статички низ. Димензија статички алоциране матрице мора бити позната већ у фази превођења и зато је потребно унапред знати максимални број врста и колона те матрице. Тако, ако рецимо хоћемо да дефинишемо матрицу, која има 50 врста и 100 колона, а елементи су целобројне променљиве, то бисмо урадили на следећи начин:

int brojevi[50][100];

Овим се декларише матрица од 5000 елемената под називом brojevi. Врсте ове матрице су нумерисане од 0 до 49, а колоне су нумерисане од 0 до 99.

Матрице је могуће и динамички алоцирати, слично као и низове, али се као напреднија тема неће обрађивати у овом материјалу.

Једном елементу матрице приступамо тако што у угластoj загради, након назива матрице наведемо број врсте, а након тога у другој угластој загради наведемо и број колоне у којој се тај елемент налази, нпр. brojevi[1][4] означава елемент који се налази у другој врсти и петој колони матрице. Када приступимо елементу матрице, можемо са њим радити све што можемо и са обичном променљивом: користити га у рачуници, постављати му вредност, итд.

На пример, дигитална, црно-бела слика може да се представи помоћу целобројне матрице тако што ће број 1 да означава црно, а број 0 бело поље, на следећи начин:

int slika[10][15] = { 
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
    { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
    { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
    { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
    { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0},
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};

У овом случају смо меморију за матрицу резервисали истовремено са попуњавањем вредности. Уколико при алокацији матрице вршимо и њену иницијализацију, можемо изоставити прву димензију матрице, односно писати int slika[][15] = ...

Разуђени низови

Свака врста матрице мора да има исти број елемената. Међутим, могуће је правити дводимензионе низове код којих то не мора бити случај. Такви низови се називају разуђени низови (енгл. jagged array) који су низови низова у правом смислу те речи.

Најједноставније их је креирати помоћу библиотечке колекције <vector>, као вектор вектора. На пример, уколико желимо да алоцирамо разуђени низ целобројног типа, то можемо да урадимо на следећи начин:

vector<vector<int>> razudjenNiz(3);
razudjenNiz[0].resize(5);
razudjenNiz[1].resize(4);
razudjenNiz[2].resize(2);

Овим је направљен разуђен низ који има три врсте, у првој се чува пет елемената, у другој четири и у трећој два.

Елементу се приступа помоћу двоструких угластих заграда. На пример, razudjenNiz[1][3] означава четврти елемент у другој врсти.

Вишедимензиони низови и матрице

Елементи програмског језика

Матрице

Матрица може да се посматра као низ низова: имамо низ врста (редова), а свака врста је низ елемената. Позиција сваког елемента у матрици је дефинисана са два броја, тј. две димензије – у којој врсти тј. реду, и у којој колони се елемент налази.

Матрица се алоцира слично као што се алоцира низ. Тако, ако рецимо хоћемо да дефинишемо матрицу, која има 50 врста и 100 колона, а елементи су целобројне променљиве, то бисмо урадили на следећи начин:

int[,] brojevi = new int[50, 100];

Овим се декларише матрица од 5000 елемената под називом brojevi. Врсте ове матрице су нумерисане од 0 до 49, а колоне су нумерисане од 0 до 99.

Захваљујући сакупљачу отпадатака програмер не мора да води рачуна о деалокацији тј. о ослобађању меморије.

Једном елементу матрице приступамо тако што у угластим заградама, након назива матрице наведемо број врсте, а после зареза и број колоне у којој се тај елемент налази. Када приступимо елементу матрице, можемо са њим радити све што можемо и са обичном променљивом: користити га у рачуници, постављати му вредност, итд.

На пример, дигитална, црно-бела слика може да се представи помоћу целобројне матрице тако што ће број 1 да означава црно, а број 0 бело поље, на следећи начин:

int[,] slika = { 
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
    { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
    { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
    { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
    { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0},
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};

У овом случају смо меморију за матрицу резервисали истовремено са попуњавањем вредности. Димензије креиране матрице одговарају броју елемената које смо унели, тако да ће ова матрица имати 10 врста и 15 колона.

Разуђени низови

Свака врста матрице мора да има исти број елемената. Међутим, могуће је правити дводимензионе низове код којих то не мора бити случај. Такви низови се називају разуђени низови (енгл. jagged array) који су низови низова у правом смислу те речи.

Они се могу алоцирати на наредни начин.

int [][] razudjenNiz = new int[3][];
razudjenNiz[0] = new int[5];
razudjenNiz[1] = new int[4];
razudjenNiz[2] = new int[2];

Овим је направљен разуђен низ који има три врсте, у првој се чува пет елемената, у другој четири и у трећој два.

Елементу се приступа помоћу двоструких угластих заграда. На пример, razudjenNiz[1][3] означава четврти елемент у другој врсти.

Вишедимензиони низови и матрице — Podlekcije